package com.glfx.utils;

import org.jsoup.internal.StringUtil;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 柧麟浮休
 * @date 2022/7/4
 */
public class FileUtils {

    /**
     * @param fileName 文件名
     * @return 得到文件的后缀名
     */
    public static String getFileSuffer(String fileName) {
        return fileName.substring(fileName.lastIndexOf(".") + 1);
    }

    /**
     * 文件的地址集合
     * 指定文件夹下 所有文件的绝对地址的集合
     *
     * @param path 存放文件的地址
     * @return 当前文件夹下的文件的全路径的集合
     */
    public static List<String> getFileUrlList(String path, String suffer) {
        List<String> pathList = new ArrayList<>();
        getFilePositionList(path, pathList, suffer);
        return pathList;
    }

    /**
     * 得到指定文件夹下的所有文件的位置，并且存放至list集合
     *
     * @param path 存放文件的地址
     * @param list 当前文件夹下的文件的全路径的集合
     */
    private static void getFilePositionList(String path, List<String> list, String suffer) {
        //创建当前文件或者文件夹的抽象
        File originFile = new File(path);
        if (originFile.exists()) {

            //得到当前文件夹下的文件集合
            File[] nextFiles = originFile.listFiles();
            if (nextFiles != null && nextFiles.length > 0) {

                //有数据的话
                for (File nextFile : nextFiles) {

                    //如果是文件的话
                    if (nextFile.isFile()) {
                        //得到当前文件的后缀
                        String fileName = nextFile.getName();
                        String suf = fileName.substring(fileName.lastIndexOf(".") + 1);


                        //为空则添加所有文件
                        if (StringUtil.isBlank(suffer)) {
                            String absolutePath = nextFile.getAbsolutePath();
                            list.add(absolutePath);
                        } else {
                            //判断当前是否为docx文件
                            if (suffer.equals(suf)) {
                                String absolutePath = nextFile.getAbsolutePath();
                                list.add(absolutePath);
                            }
                        }
                    }
                    //如果是文件夹的话
                    if (nextFile.isDirectory()) {
                        getFilePositionList(nextFile.getAbsolutePath(), list, suffer);
                    }
                }
            }
        }
    }

    public static String removeNumAndLetter(String text) {
        text = text.replaceAll("[0-9]", "")
                .replace(".", "")
                .replace("epub", "")
                .replace("Lv", "")
                .trim();
        return text;
    }

    public static String removeTargetStr(String text, String... str) {
        text = text.replace(".", "").trim();
        for (String s : str) {
            text = text.replace(s, "");
        }
        return text;
    }

    /**
     * @param str  写入的字符
     * @param path 文件全路径
     *             将字符写入文件
     */
    public static void writeFileFromStr(String str, String path) {
        try {
            FileOutputStream fos = new FileOutputStream(path);
            fos.write(str.getBytes(StandardCharsets.UTF_8));
            fos.flush();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void modifyFileName(String path, String newFileName) {
        File file = new File(path);
        file.renameTo(new File(newFileName));
    }
}
